﻿/*
 * 由SharpDevelop创建。
 * 用户： xieen
 * 日期: 2013-08-22
 * 时间: 10:16
 * 
 * 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
 */
namespace GOF23Learning.Test
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    
    /// <summary>
    /// The Description of Permissions
    /// </summary>
    public class Permissions
    {
        // 四种权限 ，当前定义为int，以下二进制表示只取后四位作说明 
        private int create = 0x0001;//1 
        // 查询  
        private int read = 0x0010;//2
        // 修改  
        private int update = 0x0100;//4
        // 删除  
        private int delete = 0x1000;//8 
        public void Check()
        {
            //大家可以观察四种权限的二进制表示的规律 ，都是2的N次方， 
            // 就表示本身，添加权限有最后一位为其它为0,查询倒数第二位为1其它都为0，修改倒数第三个为1其它都为0，删除倒数第四个为1其它都为0 
            //1111---- 这样表示有哪种权限时可以用 |(按位或) 操作 
            // 用户A有添加和修改权限  

            int usera = create | read | update;

            // 用户B有添加和删除权限  
            int userb = create | delete;

            // 2222---- 判断用户是否有某种权限用用户权限和要判断的权限进行 &(按位与) 操作，结果为要判断的权限值时表示用户有此权限，否则没有此权限  
            if ((usera & update) == update)
            {
                Console.WriteLine("用户a有更新权限");
            }
            else
            {
                Console.WriteLine("用户a没有有更新权限");
            }
            //3333---- 给用户添加权限用用户权限和要添加的权限|(按位或) 操作再覆盖之前权限值 
            if ((userb & update) == update)
            {
                Console.WriteLine("用户b有更新权限");
            }
            else
            {
                Console.WriteLine("用户b没有更新权限");
            }
            // 给用户b添加更新权限  
            userb = userb | update;
            if ((userb & update) == update)
            {
                Console.WriteLine("用户b有更新权限");
            }
            else
            {
                Console.WriteLine("用户b没有更新权限");
            }

            //4444---- 取消用户某种权限,用用户权限和要取消的权限按位取反后进行按位 操作，再覆盖之前权限值 
            if ((usera & read) == read)
            {
                Console.WriteLine("用户a有查询权限");
            }
            else
            {
                Console.WriteLine("用户a没有查询权限");
            }
            //取消用户a的查询权限  
            usera = usera & (~read);
            if ((usera & read) == read)
            {
                Console.WriteLine("用户a有查询权限");
            }
            else
            {
                Console.WriteLine("用户a没有查询权限");
            }

        }
    }



}
